package org.wm.config;

import com.google.code.kaptcha.text.impl.DefaultWordRenderer;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

/**
 * 自定义 Kaptcha 文字渲染器，实现彩色字体
 */
public class KaptchaWordRenderer extends DefaultWordRenderer {

    private static final Random RANDOM = new Random();

    @Override
    public BufferedImage renderWord(String word, int width, int height) {
        // 创建一个空白的画布
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2D = image.createGraphics();

        // 设置抗锯齿，让文字更平滑
        g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        // 【核心修改】
        // 1. 获取字体大小
        int fontSize = getConfig().getTextProducerFontSize();
        // 2. 获取字体数组
        Font[] fonts = getConfig().getTextProducerFonts(fontSize);
        // 3. 从字体数组中随机选择一个字体
        Font selectedFont = fonts[RANDOM.nextInt(fonts.length)];
        g2D.setFont(selectedFont);

        // 获取字体度量，用于计算每个字符的位置
        FontMetrics fontMetrics = g2D.getFontMetrics();

        // 获取字符间距
        int charSpace = getConfig().getTextProducerCharSpace();

        // 计算起始绘制位置
        int startX = (width - (fontMetrics.stringWidth(word) + (word.length() - 1) * charSpace)) / 2;
        int startY = (height - fontMetrics.getHeight()) / 2 + fontMetrics.getAscent();

        // 遍历字符串，为每个字符设置随机颜色并绘制
        char[] wordChars = word.toCharArray();
        for (int i = 0; i < wordChars.length; i++) {
            // 为画笔设置一个随机颜色
            g2D.setColor(KaptchaColor.getRandomColor());

            // 绘制当前字符
            g2D.drawString(String.valueOf(wordChars[i]), startX, startY);

            // 更新下一个字符的起始 X 坐标
            startX += fontMetrics.charWidth(wordChars[i]) + charSpace;
        }

        g2D.dispose();
        return image;
    }
}